package com.lee.controller.system;

import com.lee.base.BaseController;
import com.lee.base.Result;
import com.lee.utils.IpUtil;
import com.lee.utils.ServletUtils;
import com.lee.utils.ShiroUtils;
import com.lee.utils.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 登录验证
 * 
 * @author LiPengFei
 *
 */
@Controller
public class LoginController extends BaseController {
	private static final Logger log = LoggerFactory.getLogger(LoginController.class);

	@GetMapping("/login")
	public String login(HttpServletRequest request, HttpServletResponse response, Model model) {
		// 如果是Ajax请求，返回Json字符串。
		if (ServletUtils.isAjaxRequest(request)) {
			return ServletUtils.renderString(response, "{\"code\":\"1\",\"msg\":\"未登录或登录超时。请重新登录\"}");
		}
		if(ShiroUtils.getUser()!=null){
			return "redirect:/index";
		}

		return "login";
	}

	@PostMapping("/login")
	@ResponseBody
	public Result ajaxLogin(String username, String password, Boolean rememberMe) {
		UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
		Subject subject = SecurityUtils.getSubject();
		try {
			subject.login(token);
			return Result.ok("登录成功");
		} catch (AuthenticationException e) {
			String msg = "用户不存在/密码错误";
			if (StringUtils.isNotEmpty(e.getMessage())) {
				msg = e.getMessage();
			}
			return Result.error(msg);
		}
	}

	@GetMapping("/unauth")
	public String unauth() {
		return "/public/error/unauth";
	}
	
}
